iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
2

昨天用 scrapy genspider ithome ithome.com 指令建立出來的爬蟲檔案 ithome.py 內容是這樣:

import scrapy

class IthomeSpider(scrapy.Spider):
    name = 'ithome'
    allowed_domains = ['ithome.com']
    start_urls = ['http://ithome.com/']

    def parse(self, response):
        pass

每一支爬蟲都應該繼承 scrapy.Spider 類別,幾個重要的屬性和方法已經由 Scrapy CLI 自動產生了,分別說明如下:

  1. name:每支爬蟲在專案中的「唯一」名稱。
  2. allowed_domains:定義這支爬蟲允許的網域清單,如果清單中不包含目標網址的網域或子網域,此次請求會被略過。
  3. start_urls:爬蟲啟動時爬取的網址清單,會在 scrapy.Spider 類別中的 start_requests() 方法中被使用;也可以不定義這個屬性,改成覆寫 start_requests() 方法。
  4. parse(response):預設用來處理回應的回呼方法。每支爬蟲都會有一到多個不同的 parse(response) 方法。

start_requests()parse(response) 方法都必須回傳可迭代的(iterable)請求或爬取到的項目實例。

執行爬蟲

start_urls 指定技術文章的網址,並在 parse(response) 處理回應時將收到的 HTML 原始碼存到檔案中,修改後的 ithome.py 程式內容:

import scrapy

class IthomeSpider(scrapy.Spider):
    name = 'ithome'
    allowed_domains = ['ithome.com']
    start_urls = ['https://ithelp.ithome.com.tw/articles?tab=tech']

    def parse(self, response):
        with open('ithome.html', 'wb') as f:
            f.write(response.body)

以 Scrapy 的 crawl 指令來執行爬蟲。

scrapy crawl <spider-name>

https://ithelp.ithome.com.tw/upload/images/20191009/20107875YpzEDTbU54.png

執行後可以看到在 consoleg 上會有一堆過程中產生的日誌,最後就可以在專案目錄中找到剛剛儲存的 ithome.html 檔案囉!


上一篇
【Day 23】準備 Scrapy 開發環境
下一篇
【Day 25】用 Scrapy 爬取 iT 邦幫忙的技術文章
系列文
爬蟲在手、資料我有 - 30 天 Scrapy 爬蟲實戰33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言